package com.sky.result;

import lombok.Data;

import java.io.Serializable;
/**
 * 1. 当前模块名: sky-common    公共模块，存放公共类，例如: 工具类、常量类、结果类等
 * 2. 当前包名: com.sky.result    存放与结果相关的类
 * 3. 当前类名: Result    后端统一返回结果类
 */

/**
 * Result; 后端统一返回的结果类，封装了响应的状态码、错误信息和返回数据。
 * 该类使用泛型，以支持返回不同类型的数据，统一处理成功和失败的响应。
 */

 /**
 * 后端统一返回结果
 * @param <T>
 */
@Data
public class Result<T> implements Serializable {
     /**
      * * 知识点:
      * 1. 泛型 `T`：使得 `Result` 类能够处理不同类型的返回数据，增强代码的可复用性。
      * 2. `@Data`：Lombok 提供的注解，自动生成类的 getter、setter、toString 等方法，减少样板代码。
      * 3. `Serializable`：表示该类可以进行序列化，适用于需要跨网络传输或存储到文件的场景。
      * 4. `Result` 类通常用于统一封装后端的响应数据结构，减少前端对返回格式的适配工作。
      */
    private Integer code; //编码：1成功，0和其它数字为失败
    private String msg; //错误信息，失败时返回具体的错误描述
    private T data; //数据，返回的数据，类型为泛型 T，可以是任意类型的对象

    public static <T> Result<T> success() {
        Result<T> result = new Result<T>();
        result.code = 1;
        return result;
    }

    public static <T> Result<T> success(T object) {
        Result<T> result = new Result<T>();
        result.data = object;
        result.code = 1;
        return result;
    }

    public static <T> Result<T> error(String msg) {
        Result result = new Result();
        result.msg = msg;// 设置错误信息
        result.code = 0;// 设置失败编码
        return result;
    }

}
/**
 * 仿写：
 * rrorResponse; 用于封装错误响应的结果类。
 * 该类通常用于统一格式化错误信息，返回错误码和错误信息。
 * public class ErrorResponse implements Serializable {
 * // 错误码，表示具体的错误类型
 *     private Integer errorCode;
 *     // 错误信息，提供详细的错误描述
 *     private String errorMessage;
 *     public static ErrorResponse error(Integer errorCode, String errorMessage) {
 *         ErrorResponse errorResponse = new ErrorResponse();
 *         errorResponse.setErrorCode(errorCode);  // 设置错误码
 *         errorResponse.setErrorMessage(errorMessage);  // 设置错误描述
 *         return errorResponse;
 *     }
 * }
 */